// 此文件有代码库里的文件组合而成， 不要在此文件内进行开发工作。
// 应该到代码库中找，没有则在代码库中开发完成后再拷贝在此。

(function(){

    var Utils = window.Utils = 
    {
        // 按日期生成一个唯一的ID
        newId : function()
        {
            var d = new Date();
            return  d.getFullYear().toString()
                  + (d.getMonth()+1).toString()
                  + d.getDate().toString()
                  + d.getHours().toString()
                  + d.getMinutes().toString()
                  + d.getSeconds().toString()
                  + d.getMilliseconds()
                  + Math.floor(Math.random()*1000).toString();
        }
    };    
})();



///==================================================================================
/// jqMask
///==================================================================================

(function($){
    /**
     * 创建遮蔽层
     */
    var jqMask = window.jqMask = function(parent)
    {
        var p = $(parent || 'body');
        
        var w = p.width();
        var h = p.height();

        var frame = $('<div></div>');
        frame.css({
             display:'none'
            ,position:'fixed'
            ,'_position':'absolute' // 兼容ie6
            ,left:'0'
            ,top:'0'
            ,width:w+'px'
            ,height:h+'px'
            ,background:'#999'
            ,filter:'alpha(opacity=0)'
            ,opacity:'0'
        });
        p.append(frame);
        
        this.frame = frame; 
    };
    

    jqMask.prototype = {
        /**
         * 打开遮罩层
         */
        open : function()
        {
            this.frame.show();
            this.frame.fadeTo('normal',0.66);
        },
        
        /**
         * 关闭遮蔽层
         */
        close : function()
        {
            this.frame.hide();
            this.frame.fadeOut('normal');
        }
    };
})(jQuery);


// 依赖 jQuery对象
// 依赖 Utils.newId() 方法
// 以来 jqMask 对象
///==================================================================================
/// jqDialog
///==================================================================================
(function($){
    
    // 对话框内容类型
    var contentType =  { text:1, dom:2, iframe:3  };
        
    // 构造方法
    // 用new 创建的对话框在关闭时会被删除
    // 如果要创建关闭时隐藏的对话框用getInstance方法
    // @prop 即对话框的属性，有四个值 title,content,width,height
    var jqDialog = window.jqDialog = function(options)
    {
        var that = this;
        
        // 设置默认属性
        var prop =
        {
             id : Utils.newId()
            ,parent : $(  'body')
            ,title :   'Dialog'
            ,content :   ''
            ,contentType :   contentType.text
            ,width :  'auto'
            ,height :  'auto'
            ,isMask :   true   // 是否有遮罩
            ,resizable :   false
            ,draggable :   true
        };
        // 载入可选属性
        prop = $.extend(prop,options);
        
        // 构建用户界面骨架
        var frame = {
             wrap : $('<div></div>')
            ,head : $('<div></div>')
            ,body : $('<div></div>')
            ,title : $('<span>'+prop.title+'</span>')
            ,btnClose : $('<span title="关闭">×</span>')
        };
        // 创建遮罩层
        if( prop.isMask )
            frame.mask = new jqMask(prop.parent);
        
        frame.wrap.append(frame.head)
                  .append(frame.body);
        
        frame.head.append(frame.title)
                  .append(frame.btnClose);

        prop.parent.append(frame.wrap);
        
        // 设置样式
        // 居中
        var w = prop.width.replace(/[^\d]/g,'');
        var h = prop.height.replace(/[^\d]/g,'');
        var x = (0 == prop.positionX) ? "0px" : prop.positionX;
        var y = (0 == prop.positionY) ? "0px" : prop.positionY;
        frame.wrap.css({
                 display:'none'
                ,position:'fixed'
                ,'_position':'absolute' // 兼容ie6
                ,top: y|| "50%"
                ,left: x || "50%"
                ,'margin-top': y ? 0 : "-"+((h/2)+20)+"px"
                ,'margin-left': x ? 0 : "-"+((w/2)+20)+"px"
                ,'z-index':'9999'
                ,border:'2px solid #000'
                ,background:'#fff'
        });
        
        frame.body.css({
             background:'#fff'
        });

        frame.btnClose.css({
            float:'right'
            ,border:'1px solid #999'
            ,cursor:'pointer'
            ,color:'red'
            ,'font-size':'12pt'
            ,'font-weight':'bold'
        });
        
        frame.head.css({
            'border-bottom':'1px solid #000'
            ,padding:'6px',background:'#999'
        });

        // 设置弹出框的宽高
        var wh = {width:prop.width,height:prop.height};
        switch( prop.contentType )
        {
            case contentType.dom :
                frame.body.append($(prop.content));
                frame.body.css(wh);
                break;
            case contentType.iframe :
                if( prop.content ){
                    var f = $("<iframe src='"+prop.content+"'></iframe>");
                    f.css(wh);
                    frame.body.append(f);
                }
                break;
            case contentType.text :
            default :
                frame.body.text(prop.content);
                frame.body.css(wh);
                break;
        }
        
        // 关闭
        frame.btnClose.click(function(){
            that.close();
        });
        
        // 可拖拽
        if(prop.draggable){
            frame.head.mousedown(function(){
            })
            // 可拖拽提示
            .mouseover(function(){
                $(this).css({cursor:'move'});
            });
        }
        
        // 可拉伸
        if(prop.resizable)
        {
            frame.wrap.mousedown(function(ev){
                var target = ev.target;
                if(frame.wrap[0].id != target.id)
                    return;
            })
            // 可拉伸提示
            .mouseover(function(ev){
                var target = ev.target;
                if(frame.wrap[0].id == target.id)
                    frame.wrap.css({cursor:'col-resize'});
                else
                    frame.wrap.css({cursor:'default'});
            });
        }
        
        this.prop = prop;
        this.frame = frame;
    };

    // 公共方法
    jqDialog.prototype = 
    {
        // 打开对话框
        open : function(callback)
        {   
            var f = this.frame;
            if(f.mask)
                f.mask.open();

            f.wrap.show();
           
            if(callback && Function == callback.constructor )
                callback.call(this);
        },
        // 关闭对话框
        close : function(callback)
        {
            var f = this.frame;

            f.wrap.hide();

            if(f.mask)
                f.mask.close();
   
            if(callback && Function == callback.constructor )
                callback.call(this);
        }
    };
    
    // 静态属性
    jqDialog.contentType = contentType;
    
    // 静态方法
    // @handler 点击打开对话框的元素
    // @url 如果handler是a元素，可以通过href属性传递url而忽略此参数
    // @loadOnce 表示只加载一次
    jqDialog.showIframe = function(handler,options){
        var settings = {width:"300px",height:"120px",url:"",loadOnce:false};
        if( "object" == typeof(options) )
            settings = $.extend(settings,options);

        //重载：function(handler,width,height,url)
        else
            settings = $.extend(settings,{width:arguments[1],height:arguments[2],url:arguments[3]});
        
        var d = new jqDialog($.extend({contentType:jqDialog.contentType.iframe,isMask:false},settings));
        var f = null;
        $(handler).click(function(){
            var that = this;
            d.open(function(){
                var src;
                if(!settings.url)
                    src = that.href;
                else
                    src = settings.url;

                // 是否每次都重新加载iframe
                if( !settings.loadOnce ){
                    d.frame.body.empty();
                    f = null;  
                }                
                if( null == f ){
                    // 设置弹出框的宽高
                    var wh = {width:d.prop.width,height:d.prop.height};
                    f = $("<iframe src='"+src+"'></iframe>");
                    f.css(wh);
                    d.frame.body.append(f);
                    
                    f.load(function(){
                        f.contents().find(".cancel").click(function(){
                            d.close();
                            return false;
                        });
                    });
                }
            });
            return false;
        });
    };
         
})(jQuery);


///==================================================================================
/// jqTabs
///==================================================================================

(function($){
    //@menus tab菜单，jq对象或jq选择器表达式
    //@panels 菜单对应内容面板，jq对象或jq选择器表达式
    //@conf 配置对象
    var jqTabs = window.jqTabs = function( menus,panels,conf )
    {
        // 主要html部件
        menus = $(menus);
        panels= $(panels);

        // 读取配置
        var settings = {
             interval : 5000        // 自动触发才有效
            ,event    : 'mouseover'
            ,index    : 0
            ,activeClass : "ui-tabs-selected" // 默认激活样式
        };
        conf = $.extend(settings,conf);
        
        // 触发事件
        if( -1!=conf.event.indexOf("mouseover") )   // mouseover触发
            menus.mouseover(function(e){
                switchTab.call(this);
            });
            
        if( -1!=conf.event.indexOf("click") )       // click触发
            menus.click(function(e){
                switchTab.call(this);
            });
            
        if( -1!=conf.event.indexOf("auto") )        // 自动触发
        {
            var index = -1;
            setInterval( function(){
                if( -1 == index )
                    index = conf.index;
                else{   
                    ++index;
                    if( index >= menus.size() )
                        index = 0;
                }
                
                switchTab.call( menus[index] );
            },  conf.interval );
        }

        // 切换函数
        var switchTab = function()
        {
            var index = menus.index(this);
            menus.removeClass(conf.activeClass).eq(index).addClass(conf.activeClass);
            panels.hide().eq(index).show();
        }
        
        // 设置默认显示
        switchTab.call( menus[conf.index] );
    };
})( jQuery );


// Ajax文件上传
(function($){
    
    var formId = "ajaxUploadForm";
    var iframeName = "ajaxUpload";
    var beforeUpload = null;
    var afterUpload = null;

    // 上传文件
    //@ file 文件输入框(dom对象或jq表达式)
    //@ btnUpload 触发上传事件的元素
    //@ 文件上传成功后响应
    var jqAjaxUpload = window.jqAjaxUpload = function(file,btnUpload,module,beforeUploadFn,afterUploadFn)
    {
        file = $(file);
        btnUpload = $(btnUpload);
        beforeUpload = beforeUploadFn;
        afterUpload = afterUploadFn;
        
        if( 0<$("body").find("#"+formId).size() )
            return;

        //<%= DateTime.Now.Ticks %>
        var iframe = $('<iframe name="'.concat(iframeName,'"></iframe>'));
        var form = $('<form method="post" target="'.concat(iframeName,'" enctype="multipart/form-data"></form>'));
        iframe.hide();
        form.hide();
        
        form[0].id = formId;
        form[0].action = "FileUpload.aspx?Module="+module;
        $("body").append(iframe)
                 .append(form);

        btnUpload.click(function(){
            if( "function" == typeof(beforeUpload) )
                beforeUpload();

            var f = file.clone();
            var p = file.parent();

            form.append( file );      // 由于安全等级问题，file标签是只读的，value属性无法赋值
            p.append(f);              // 这里要求file标签必须有一个单独的parent元素包裹

            form.submit();
            
            form.empty();
            file = f;
        });
    };
    
    // 上传后响应，此方法由服务器端返回的javascript调用
    // 调用方法：window.parent.jqAjaxUploadResponse(resp);
    var jqAjaxUploadResponse = window.jqAjaxUploadResponse = function(resp)
    {
        if( "function" == typeof(afterUpload) )
            afterUpload(resp);
    };
})(jQuery);